Add supportsChannelFeatures tier1 to all app manifests#453
Add supportsChannelFeatures tier1 to all app manifests#453
Conversation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
@claude update the schema version to 1.25, add schema property "$schema": "{string}", if it doesn't exist. it should point to this https://developer.microsoft.com/json-schemas/teams/v1.25/MicrosoftTeams.schema.json. Ensure that there are no schema validation errors. |
rajan-chari
left a comment
There was a problem hiding this comment.
The supportsChannelFeatures property requires manifest schema v1.25, but all templates still declare v1.20:
"$schema": "https://developer.microsoft.com/json-schemas/teams/v1.20/MicrosoftTeams.schema.json",
"manifestVersion": "1.20",These need to be bumped to v1.25 for the new property to pass schema validation:
"$schema": "https://developer.microsoft.com/json-schemas/teams/v1.25/MicrosoftTeams.schema.json",
"manifestVersion": "1.25",Ref: https://learn.microsoft.com/en-us/microsoft-365/extensibility/schema/?view=m365-app-1.25
Also note there was a Developer Portal bug where supportsChannelFeatures silently disappeared on save — reportedly fixed as of March 19, 2026: https://learn.microsoft.com/en-us/answers/questions/5777774/unable-to-save-supportschannelfeatures-in-teams-ap
Test Results:
|
| # | Trigger | Result |
|---|---|---|
| 1 | Bot added to shared channel | ✅ conversationUpdate with eventType: "channelMemberAdded", channel.type: "shared" |
| 2 | Message in shared channel | ✅ message activity received with channel.type: "shared" and full team/channel context |
| 3 | Bot added to private channel | ✅ conversationUpdate with eventType: "channelMemberAdded", channel.type: "private" |
| 4 | Message in private channel | ✅ message activity received with channel.type: "private" and full team/channel context |
| 5 | Message in standard channel | ✅ Works as expected |
Results: v1.20 manifest WITHOUT supportsChannelFeatures (control)
| # | Trigger | Result |
|---|---|---|
| 1 | Manifest update applied | channelMemberRemoved from private channel — Teams actively evicted the bot |
| 2 | @mention in shared channel | ❌ Bot not available to @mention |
| 3 | @mention in private channel | ❌ Bot not available to @mention (removed from channel) |
| 4 | Message in standard channel | ✅ Still works |
Key Finding
supportsChannelFeatures: "tier1" is required for bots to participate in shared and private channels. Removing the property causes Teams to actively remove the bot from those channels. This confirms Mehak's issue.
Blocker: Schema version must be bumped
As flagged in my earlier review, all 11 templates still reference v1.20:
"$schema": "https://developer.microsoft.com/json-schemas/teams/v1.20/MicrosoftTeams.schema.json",
"manifestVersion": "1.20",The v1.20 schema has "additionalProperties": false at the root and does not define supportsChannelFeatures. The v1.25 schema does define it (allowed values: "tier1" or null).
This means the PR as-is produces technically invalid manifests — any schema validator will reject supportsChannelFeatures as an unknown property under v1.20. The fix worked in my testing because Teams is lenient about validation, but:
- Teams Developer Portal may strip the property
- Teams Toolkit validation will flag it
- It's incorrect per the schema contract
Must fix: Bump $schema and manifestVersion from v1.20 to v1.25 in all 11 files.
Tested 2026-03-21 on BAMI1 tenant with @microsoft/teams.apps TypeScript SDK
Summary
"supportsChannelFeatures": "tier1"to the root of all 10 Teams appmanifest.json.hbstemplate filesskip-test-verification